//
//  Problem1347.swift
//  TestProject
//
//  Created by 武侠 on 2021/3/22.
//  Copyright © 2021 zhulong. All rights reserved.
//

import UIKit

/*
 1347. 制造字母异位词的最小步骤数
 给你两个长度相等的字符串 s 和 t。每一个步骤中，你可以选择将 t 中的 任一字符 替换为 另一个字符。

 返回使 t 成为 s 的字母异位词的最小步骤数。
 字母异位词 指字母相同，但排列不同（也可能相同）的字符串。

 示例 1：
     输出：s = "bab", t = "aba"
     输出：1
     提示：用 'b' 替换 t 中的第一个 'a'，t = "bba" 是 s 的一个字母异位词。
 示例 2：
     输出：s = "leetcode", t = "practice"
     输出：5
     提示：用合适的字符替换 t 中的 'p', 'r', 'a', 'i' 和 'c'，使 t 变成 s 的字母异位词。
 示例 3：
     输出：s = "anagram", t = "mangaar"
     输出：0
     提示："anagram" 和 "mangaar" 本身就是一组字母异位词。
 示例 4：
     输出：s = "xxyyzz", t = "xxyyzz"
     输出：0
 示例 5：
     输出：s = "friend", t = "family"
     输出：4
 提示：
     1 <= s.length <= 50000
     s.length == t.length
     s 和 t 只包含小写英文字母
 */
@objcMembers class Problem1347: NSObject {
    func solution() {
        print(minSteps("bab", "aba"))
        print(minSteps("leetcode", "practice"))
        print(minSteps("anagram", "mangaar"))
        print(minSteps("xxyyzz", "xxyyzz"))
        print(minSteps("friend", "family"))
    }
    
    /*
     字典存字符
     1: 创建一个字典dic，存储s所有的字符的数量
     2: 遍历字符串t，然后在dic走到对应的字符c
        2.1 dic中有c那么 dic[c] -= 1
        2.1 dic中没有c，那么dic[c] = -1
     3: 返回dic[c] > 0 的和
     */
    func minSteps(_ s: String, _ t: String) -> Int {
        var dic:[Character: Int] = [:]
        for c in s {
            dic[c, default: 0] += 1
        }
        
        print(dic)
        for c in t {
            dic[c, default: 0] -= 1
        }
        
        print(dic)
        var result = 0
        for value in dic.values {
            if value > 0 {
                result += value
            }
        }
        
        return result
    }
}
